#!/usr/bin/python
# coding=utf-8

# Tradutor de titulos e sinopses
# Fabio Longarai Silva <fabio@longarai.com>
# 18/02/2010
# Use por sua conta e risco, faca sempre backups dos arquivos "nfo" antes :)

# Modificado por gfjardim <gfjardim@gmail.com> em 23/04/2010
# Modificações realizadas: 
###   Mudança do parser XML do ElementTree para XML.DOM, para permitir maior controle na conversão de charset, e possivelmente proporciona compatibilidade com o Windows;
###   Mudança na função "compareyear" por sugestão do "eseffair";
###   Manutenção dos arquivos .nfo gerados pelo Ember em UTF-8, preservando a compatibilidade com o programa e possibilitando caracteres especiais e acentuação;
###   Possibilidade de se pular os arquivos já traduzidos, com a adição do campo <traduzido> ao .nfo;
###   Conversão de fim de linha do formato Unix para Windows;
###   Correção dos erros por inexistência do campo "Plot" no arquivo .nfo gerado pelo Ember;
###   Correção dos erros quando os títulos possuem acentuação ou caracteres especiais;
###   Pequena mudança na saída do programa, de forma a ficar mais claro que arquivo está sendo traduzido, e se o mesmo já foi traduzido anteriormente.
# That's all, folks!

# Libs
import urllib, re, sys, codecs, htmlentitydefs, os, shutil
from xml.dom.minidom import parse, parseString
from datetime import datetime
from sys import exit

if sys.platform == 'win32':
	sysencode = "cp850"
else:
	sysencode = sys.getfilesystemencoding()

# Logs
log_ignorados = []
log_traduzidos = []
log_faltantes = []

# Alguns sites brasileiros possuem pequenas inconsistencias com a informacao do imdb
# A mais comun e haver diferenca de ano, nao sei se eles colocam o ano de lancamento
# no brasil ou algo assim, mas ja vi filmes de 2006 listados como 2007 em alguns sites.
#
# Para contornar isso, inseri um fator de tolerancia na variavel YEAR_MAX_ERROR
#
# Se colocarmos em 0 ele considera as comparacoes de ano exatas, conforme se aumenta
# o valor ele aumenta a tolerancia.
# Recomendado: 1
YEAR_MAX_ERROR = 1

# OBSOLETO #
# Nao sao mais feitas comparacoes de diretores pois alguns sites nao possuem
# padrao no formato dos dados e isso inviabiliza a extracao
LAZY_DIRECTOR_COMPARISION = 1

#### Funcoes basicas ####
# Limpa strings e racionaliza espacos
def chomp(s):
	s = s.strip("\t\r\n")
	s = re.sub('\t', ' ', s)	
	s = re.sub('\s', ' ', s)
	s = re.sub('^ ', '', s)
	s = re.sub(' $', '', s)
	return s

	
# Transpoem artigos iniciais de frases.
# "O Homem Mau" se transforma em "Homem Mau, O"
# Idiomas suportados: ingles, portugues e espanhol.
def shiftarticle(s):
	for art in [ 'The', 'O', 'A', 'Os', 'As', 'El', 'La', 'Los', 'Las', 'Les', 'Le' ]:
		x = '^' + art + ' '
		y = ', ' + art
		if re.search(x, s):
			return re.sub(x, '', s) + y
	return s

# Inverso da funcao acima, coloca um artigo transposto no inicio da string
def unshiftarticle(s):
	for art in [ 'The', 'O', 'A', 'Os', 'As', 'El', 'La', 'Los', 'Las', 'Les', 'Le' ]:
		x = ', ' + art + '$'
		y = art + ' '
		if re.search(x, s):
			return y + re.sub(x, '', s)
	return s

# Remove o artigo inicial
def noarticle(s):
	for art in [ 'The', 'O', 'A', 'Os', 'As', 'El', 'La', 'Los', 'Las', 'Les', 'Le' ]:
		x = '^' + art + ' '
		if re.search(x, s):
			return re.sub(x, '', s)
	return s


# Remove tags entre <> ex: <blabla>
def notag(s):
	return re.sub('<([^>]*)>', '', s)


# Comparacao de anos, baseado em fator de tolerancia -> Atualizado por sugestão do "eseffair"
def compareyear(a, b):
	if int(b) == 0:
		return 1
	if abs(int(a) - int(b)) <= YEAR_MAX_ERROR:
		return 1
	else:
		return 0

# Comparacao de titulos, tolera deslocamento e supressao de artigos 
def comparetitle(a, b): 
	if (a == b) or (noarticle(a) == noarticle(b)) or (a == noarticle(b)) or (noarticle(a) == b) or (a == shiftarticle(b)) or (shiftarticle(a) == b):
		return 1
	else:
		return 0

#### Funcoes especificas ####

# Busca informacoes no adorocinema.com
# Retorna titulo, ano, sinopse e ainda a url de informacao do filme (nao usado)
def getadorocinema(movie):
	movie['title'] = html_replace_clean(movie['title']).title()
	try:
		search_url = 'http://www.adorocinema.com/common/search/search_by_film/?criteria=' + re.sub(' ', '+', movie['title'])+"&section=film"
		f = urllib.urlopen(search_url)
		search_content = f.read()
		f.close()
		debug(search_content)
		search_content = to_unicode_or_bust(search_content)
		id_list = re.findall('<div class=\"search-item\">[\n|\r|\t]*<a href="http://www.adorocinema.com/filmes/([^/]*).*[\n|\r|\t]*.*[\n|\r|\t]*<p>lan[^0-9]*../../([0-9]*)', search_content)
	except:
		return { 'title': '', 'year': '', 'plot': '', 'url': ''}
	if id_list:
		for i,y in id_list:
			if compareyear(y, movie['year']):
				url = 'http://www.adorocinema.com/filmes/' + i + '/'
				f = urllib.urlopen(url)
				page_content = f.read()
				debug(page_content)
				page_content = to_unicode_or_bust(page_content)
				f.close()
				# parsing
				title = re.findall('<td width=\"56%\">[\n|\r|\t]*<h1>([^>]*)</h1>', page_content)
				if title:
					title = title[0]
				else:
					continue
				orig_title = re.findall('<p><strong>titulo original:</strong> \(([^<]*)\)</p>', page_content)
				if orig_title:
					orig_title = orig_title[0]
				else:
					continue
				year = re.findall('<p><strong>lan[^0-9]*([0-9]*)', page_content)
				if year:
					year = year[0]
				else:
					continue
				plot = re.findall('<h4>sinopse:</h4></div>[\n|\r|\t]*(.*)</div>', page_content)
				if plot:
					plot = plot[0]
				else:
					plot = ''
				# limpeza
				title = chomp(title)
				orig_title = to_unicode_or_bust(chomp(orig_title))
				orig_title = html_replace_clean(orig_title.encode('ascii', 'xmlcharrefreplace')).title()
				year = chomp(year)
				plot = notag(chomp(plot))
				# validacao
				if compareyear(year, movie['year']) and comparetitle(orig_title, movie['title']):
					return { 'title': title, 'year': year, 'plot': plot, 'url': url}
					break
			else:
				continue
	# Se nao bater, retorna o dic limpo
	return { 'title': '', 'year': '', 'plot': '', 'url': ''} 		

# Busca informacoes no interfilmes.com
# Retorna titulo, ano, sinopse e ainda a url de informacao do filme (nao usado)
def getinterfilmes(movie):
	movie['title'] = html_replace_clean(movie['title']).title()
	try:
		search_url = 'http://interfilmes.com/busca.html'
		search_params = { "search": movie['title'] }
		search_query = urllib.urlencode(search_params)
		f = urllib.urlopen(search_url, search_query)
		search_content = f.read()
		debug(search_content)
		f.close()
		id_list = re.findall('valign=top><a href=\"filme_([^<]*)\.html\">[^_]*<br>Ano de Lan.amento: ([0-9]*)', search_content)
	except:
		return { 'title': '', 'year': '', 'plot': '', 'url': ''}
	if id_list:
		for i,y in id_list:
			if compareyear(y, movie['year']):
				url = 'http://interfilmes.com/filme_' + i + '.html'
				try:
					f = urllib.urlopen(url)
				except:
					continue
				page_content = f.read()
				f.close()
				debug(page_content)
				title = re.findall('<u>T.tulo no Brasil:</u>&nbsp;\n([^<]*)<br>', page_content)
				if title:
					title = title[0]
				else:
					continue
				orig_title = re.findall('<u>T.tulo Original:</u>&nbsp;\n([^<]*)<br>', page_content)
				if orig_title:
					orig_title = orig_title[0]
				else:
					continue
				year = re.findall('<u>Ano de Lan.amento:</u>&nbsp;\n([0-9]*)<br>', page_content)
				if year:
					year = year[0]
				else:
					continue
				plot = re.findall('<u><b>Sinopse</b></u><br>[\n|\r|\t]*<div align=\"justify\">[\n|\r|\t]*(.*)<br></div>', page_content)
				if plot:
					plot = plot[0]
				else:
					plot = ''
				title = chomp(title)
				orig_title = to_unicode_or_bust(chomp(orig_title))
				orig_title = html_replace_clean(orig_title.encode('ascii', 'xmlcharrefreplace')).title()
				year = chomp(year)
				plot = notag(chomp(plot))
				if compareyear(year, movie['year']) and comparetitle(orig_title, movie['title']):
					return { 'title': title, 'year': year, 'plot': plot, 'url': url}
					break
			else: 
				continue
	return { 'title': '', 'year': '', 'plot': '', 'url': ''} 		

# Busca informacoes no cineplayers.com
# Retorna titulo, ano, sinopse e ainda a url de informacao do filme (nao usado)
def getcineplayers(movie):
	movie['title'] = html_replace_clean(movie['title']).title()
	try:
		search_url = 'http://www.cineplayers.com/busca_res.php'
		search_params = { "titulo_original": shiftarticle(movie['title']), "tipo": "1" }
		search_query = urllib.urlencode(search_params)
		f = urllib.urlopen(search_url, search_query)
		search_content = f.read()
		debug(search_content)
		f.close()
		id_list = re.findall('a href="filme.php\?id=([0-9]*)".*[(]([0-9]*)', search_content)
	except:
		return { 'title': '', 'year': '', 'plot': '', 'url': ''}
	if id_list:
		for i,y in id_list:
			if compareyear(y, movie['year']):
				url = 'http://www.cineplayers.com/filme.php?id=' + i
				try:
					f = urllib.urlopen(url)
				except:
					continue
				page_content = f.read()
				debug(page_content)
				f.close()
				title = re.findall('class=\"tit\">([^<]*)</span>', page_content)
				if title:
					title = title[0]
				else:
					continue
				tmp = re.findall('class=\"txt_italico\">\(([^<]*), <a href=\"index_filmes.php\?ano=([0-9]*)', page_content)
				if tmp:
					orig_title = tmp[0][0]
					year = tmp[0][1]
				else:
					continue
				plot = re.findall('Sinopse:</span> ([^<]*)</div>', page_content)
				if plot:
					plot = plot[0]
				else:
					plot = ''
				title = chomp(title)
				orig_title = to_unicode_or_bust(chomp(orig_title))
				orig_title = html_replace_clean(orig_title.encode('ascii', 'xmlcharrefreplace')).title()
				year = chomp(year)
				plot = notag(chomp(plot))
				if compareyear(year, movie['year']) and comparetitle(orig_title, movie['title']):
					return { 'title': title, 'year': year, 'plot': plot, 'url': url}
					break
			else: 
				continue
	return { 'title': '', 'year': '', 'plot': '', 'url': ''} 	

# Busca informacoes no epipoca.uol.com.br
# Retorna titulo, ano, sinopse e ainda a url de informacao do filme (nao usado)
def getepipoca(movie):
	movie['title'] = html_replace_clean(movie['title']).title()
	try:
		search_url = 'http://epipoca.uol.com.br/busca.php'
		search_params = { 'busca': movie['title'], 'opc': 'filmes' }
		search_query = urllib.urlencode(search_params)
		f = urllib.urlopen(search_url, search_query)
		search_content = f.read()
		debug(search_content)
		f.close()
		id_list = re.findall('class=\"titulo\"><a href=\"filmes_detalhes.php\?idf=([0-9]*)\">.*<a href=\"busca_mais.php\?opc=ano&busca=([0-9]*)\">', search_content)
	except:
		return { 'title': '', 'year': '', 'plot': '', 'url': ''}
	if id_list:
		for i,y in id_list:
			if compareyear(y, movie['year']):
				url = 'http://epipoca.uol.com.br/filmes_detalhes.php?idf=' + i
				try:
					f = urllib.urlopen(url)
				except:
					continue
				page_content = f.read()
				f.close()
				title = re.findall('class="titulo">([^<]*)</font><br>', page_content)
				if title:
					title = title[0]
				else:
					continue
				orig_title = re.findall('</font><br>\(([^<]*), <a href=\"busca_mais.php\?opc=pais&busca=', page_content)
				if orig_title:
					orig_title = orig_title[0]
				else:
					continue
				year = re.findall('a href=\"busca_mais.php\?opc=ano&busca=([0-9]*)\">', page_content)
				if year:
					year = year[0]
				else:
					continue
				plot = re.findall('<b>SINOPSE</b></font><br><br>([^<]*)</td></tr>', page_content)
				if plot:
					plot = plot[0]
				else:
					plot = ''

				title = chomp(title)
				orig_title = to_unicode_or_bust(chomp(orig_title))
				orig_title = html_replace_clean(orig_title.encode('ascii', 'xmlcharrefreplace')).title()
				year = chomp(year)
				plot = notag(chomp(plot))
				if compareyear(year, movie['year']) and comparetitle(orig_title, movie['title']):
					return { 'title': title, 'year': year, 'plot': plot, 'url': url}
					break
			else: 
				continue
	return { 'title': '', 'year': '', 'plot': '', 'url': ''}
	
#### Funções novas ####	

def debug(s):
	return

spc = (('&#192;','A'),	('&#193;','A'),	('&#194;','A'),	('&#195;','A'),	('&#196;','A'),	('&#199;','C'),	('&#200;','E'),	('&#201;','E'), ('&#198;','AE'),
	('&#202;','E'),	('&#203;','E'),	('&#204;','I'),	('&#205;','I'),	('&#207;','I'),	('&#217;','U'),	('&#218;','U'),	('&#220;','U'),
	('&#219;','U'),	('&#224;','a'),	('&#225;','a'),	('&#226;','a'),	('&#227;','a'),	('&#228;','a'),	('&#231;','c'),	('&#232;','e'),
	('&#233;','e'),	('&#234;','e'),	('&#235;','e'),	('&#236;','i'),	('&#237;','i'),	('&#238;','i'),	('&#239;','i'),	('&#242;','o'),
	('&#243;','o'),	('&#244;','o'),	('&#245;','o'),	('&#249;','u'),	('&#250;','u'),	('&#251;','u'),	('&#252;','u'),	('&#221;','Y'),	('&#253;','y'))

def html_replace_clean(s):
	for code,caracter in spc:
		s = s.replace(code,caracter)
	return s

# Tansforma as strings em Unicode
def to_unicode_or_bust(
         obj, encoding='iso-8859-1'):
     if isinstance(obj, basestring):
         if not isinstance(obj, unicode):
             obj = unicode(obj, encoding)
     return obj

#Traduz os gêneros
#A lista de tuplas abaixo contem apenas os gêneros que constam no imdb, por favor adicione mais equivalências.
genres = ((u'Action',u'Ação'),(u'Adventure',u'Aventura'),(u'Animation',u'Animação'),(u'Biography',u'Biografia'),(u'Comedy',u'Comédia'),(u'Documentary',u'Documentário'),(u'Family',u'Família'),(u'Fantasy',u'Fantasia'),(u'History',u'História'),(u'Music',u'Música'),(u'Mystery',u'Mistério'),(u'News',u'Notícia'),(u'Sci-Fi',u'Ficção científica'),(u'Sport',u'Esporte'),(u'War',u'Guerra'),(u'Western',u'Ocidental'),('Science Fiction',u'Ficção científica'))

def gentraz(s):
	for genre_eng, genre_pt in genres:
		s = s.replace(genre_eng,genre_pt)
	return s

# Busca o valor de um determinado objeto, e se o mesmo não existir, cria um objeto com o mesmo nome apenas com um "espaço" como valor
# Essa função visa resolver os casos onde o Ember não escreve o "Plot", apenas o "Outline"
def node_val(s,xml_file):
	if not xml_file.getElementsByTagName(s):
		newel = xml_file.createElement(s)
		newtx = xml_file.createTextNode(' ')
		newel.appendChild(newtx)
		xml_file.getElementsByTagName("movie").item(0).appendChild(newel)
	try:
		if xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue:
			output = xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue
	except:
		newtx = xml_file.createTextNode(' ')
		xml_file.getElementsByTagName(s).item(0).appendChild(newtx)
		output = xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue		
	output = to_unicode_or_bust(output)
	return output

# Escreve o valor enviado para o elemento especificado e, caso este não exista, será criado com o valor especificado
def elem_val(s,v,xml_file):
	if not xml_file.getElementsByTagName(s):
		newel = xml_file.createElement(s)
		newtx = xml_file.createTextNode(' ')
		newel.appendChild(newtx)
		xml_file.getElementsByTagName("movie").item(0).appendChild(newel)
	try:
		if xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue:
			if v:
				v = to_unicode_or_bust(v)
				xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue = v
	except:
		newtx = xml_file.createTextNode(' ')
		xml_file.getElementsByTagName(s).item(0).appendChild(newtx)
		if v:
			v = to_unicode_or_bust(v)
			xml_file.getElementsByTagName(s).item(0).childNodes[0].nodeValue = v			
	return

def scrap(filename):
	try:
		xml_file = parse(filename)
	except:
		return
	
	if xml_file.getElementsByTagName("originaltitle"):
		title = node_val("originaltitle",xml_file)
	else:
		elem_val("originaltitle",xml_file.getElementsByTagName("title").item(0).childNodes[0].nodeValue,xml_file)
		title = node_val("originaltitle",xml_file)
			
	print " "
	print " "
	print "<> Abrindo arquivo: "+filename
	print "<-> Nome original do filme: "+to_unicode_or_bust(title).encode(sysencode)

	# Ignora se o filme já foi traduzido, caso -> ignore_trad = 1
	if ignore_trad == 1:
		if xml_file.getElementsByTagName("traduzido"):
			print u"---> Ignorando... [Já traduzido!]".encode(sysencode)
			log_ignorados.append(filename)
			return

	# --> A última parte evita que valores em Unicode sejam enviados para as funções "scrappers", tansformando esses valores em valores HTML
	title = title.encode('ascii', 'xmlcharrefreplace') 
	year = node_val("year", xml_file)
	plot = node_val("plot", xml_file)
	movie = {'title': chomp(title), 'year': year }

	#Traduz os gêneros
	elem_val("genre", gentraz(node_val("genre", xml_file)), xml_file)

	# A ordem de pesquisa é:
	# 1. Cineplayers
	# 2. Epipoca
	# 3. Interfilmes
	# 4. Adorocinema
	#
	# PS: sinta-se a vontade para mudar a ordem :)

	res = getcineplayers(movie)
	brtitle = res['title']
	brplot  = res['plot']
	if brtitle != '' and plot != '':
		elem_val("title", brtitle, xml_file)
		elem_val("plot", brplot, xml_file)
		elem_val("outline", brplot, xml_file)
		elem_val("traduzido", "Cineplayers", xml_file)
		print "|<o>| Nome traduzido do filme: "+to_unicode_or_bust(brtitle).encode(sysencode)
		print "<-=-=> Traduzido usando o Cineplayers."
		log_traduzidos.append("Cineplayers: "+filename+"  --->  "+brtitle)
	else:
		res = getepipoca(movie)
		brtitle = res['title']
		brplot  = res['plot']
		if brtitle != '' and plot != '':
			elem_val("title", brtitle, xml_file)
			elem_val("plot", brplot, xml_file)
			elem_val("outline", brplot, xml_file)
			elem_val("traduzido", "e-Pipoca", xml_file)
			print "|<o>| Nome traduzido do filme: "+to_unicode_or_bust(brtitle).encode(sysencode)
			print "<-=-=> Traduzido usando o e-Pipoca."
			log_traduzidos.append("e-Pipoca:    "+filename+"  --->  "+brtitle)
		else:
			res = getinterfilmes(movie)
			brtitle = res['title']
			brplot  = res['plot']
			if brtitle != '' and plot != '':
				elem_val("title", brtitle, xml_file)
				elem_val("plot", brplot, xml_file)
				elem_val("outline", brplot, xml_file)
				elem_val("traduzido", "Interfilmes", xml_file)
				print "|<o>| Nome traduzido do filme: "+to_unicode_or_bust(brtitle).encode(sysencode)
				print "<-=-=> Traduzido usando o Interfilmes."
				log_traduzidos.append("Interfilmes: "+filename+"  --->  "+brtitle)
			else:
				res = getadorocinema(movie)
				brtitle = res['title']
				brplot  = res['plot']
				if brtitle != '' and plot != '':
					elem_val("title", brtitle, xml_file)
					elem_val("plot", brplot, xml_file)
					elem_val("outline", brplot, xml_file)
					elem_val("traduzido", "Adorocinema", xml_file)
					print "|<o>| Nome traduzido do filme: "+to_unicode_or_bust(brtitle).encode(sysencode)
					print "<-=-=> Traduzido usando o Adorocinema."
					log_traduzidos.append("AdoroCinema: "+filename+"  --->  "+brtitle)
				else:
					print u" /!\ Filme não encontrado... :(".encode(sysencode)
					log_faltantes.append(filename)
					return					
	if cback == 1:
		shutil.copyfile(filename,"%s.bkp" % (filename))
		print "Criado backup em %s.bkp".encode(sysencode) % (to_unicode_or_bust(filename))
	arquivo = open(filename,"w")
	arquivo.write(codecs.BOM_UTF8) # Sinaliza o arquivo como UTF-8
	arquivo.write(xml_file.toxml("UTF-8")) #---> Transforma o fim de linha do formato Unix para o formato Windows
	arquivo.close()
	return

# Busca recursivamente os nfos
def dirEntries(dir_name, subdir, *args):
    fileList = []
    for file in os.listdir(dir_name):
        dirfile = os.path.join(dir_name, file)
        if os.path.isfile(dirfile):
            if not args:
                fileList.append(dirfile)
            else:
                if os.path.splitext(dirfile)[1][1:] in args:
                    fileList.append(dirfile)
        # recursively access file names in subdirectories
        elif os.path.isdir(dirfile) and subdir:
            fileList.extend(dirEntries(dirfile, subdir, *args))
    return fileList

#### Codigo basico ####

# Repassa os argumentos intruduzidos
mesg_argv = u"""\r\nSintaxe ou caminho inválidos!

Sintaxe suportada: translate [Opções] 'Caminho do arquivo ou da pasta'

Opções: 
	-i : ignora os arquivos já traduzidos
	-b : cria backup do arquivo nfo antes da tradução
	-r : restaura os backups realizados antes da tradução 

Obs: a última opção deverá ser usada sozinha, 
     e o caminho deverá ser obrigatoriamente uma pasta!
	 
	 """.encode(sysencode)

tm_argv = len(sys.argv)

if tm_argv < 2:
	exit(mesg_argv)
else:
	if os.path.exists(sys.argv[tm_argv-1]):
		caminho = sys.argv[tm_argv-1]
	else:
		exit(mesg_argv)

ignore_trad = 0
cback = 0
restore = 0
for argumento in sys.argv:
	if argumento == "-i":
		ignore_trad = 1
	if argumento == "-b":
		cback = 1
	if argumento == "-r":
		restore = 1

if restore == 1:
	if os.path.isdir(caminho):
		arquivos = dirEntries(caminho, True, "bkp")
		for bkp in arquivos:
			shutil.copyfile(bkp,bkp.strip(".bkp"))
			print "\r\n--> Restaurando arquivo "+bkp.strip(".bkp")
		exit("Arquivos restaurados!")
	else:
		exit(mesg_argv)


#Verifica se o caminho é pasta ou arquivo, e examina recursivamente as pastas
if os.path.isdir(caminho):
	arquivos = dirEntries(caminho, True, "nfo")
	for nfo in arquivos:
		scrap(nfo)
else:
	if os.path.isfile(caminho):
		scrap(caminho)
	else:
		print tm_argv
		
# Escreve arquivo de log
lista_faltantes = u"Lista de arquivos não traduzidos: \r\n \r\n"
for s in log_faltantes:
	lista_faltantes = lista_faltantes + "     "+to_unicode_or_bust(s)+"\r\n"
lista_traduzidos = u"Lista de arquivos traduzidos: \r\n \r\n"
for s in log_traduzidos:
	lista_traduzidos = lista_traduzidos + "     "+to_unicode_or_bust(s)+"\r\n"
lista_ignorados = u"Lista de arquivos ignorados: \r\n \r\n"
for s in log_ignorados:
	lista_ignorados = lista_ignorados + "     "+to_unicode_or_bust(s)+"\r\n"

conteudo_log = "Log para translate.py do caminho "+caminho+": \r\n \r\n"+lista_faltantes+"\r\n \r\n \r\n"+lista_traduzidos+"\r\n \r\n \r\n"+lista_ignorados
log = open(os.path.abspath(os.path.dirname(sys.argv[0]))+"/log_translate.log","w")
log.write(codecs.BOM_UTF8) # Sinaliza o arquivo como UTF-8
log.write(to_unicode_or_bust(conteudo_log).encode("utf-8"))
log.close()
